<?php
// 订单模型
class ImgEditService extends Service {
	
	/**
	 * 上传图片，做头像剪切准备
	 * @param String 	$baseuploadpath		相对王站基本的完整保存路径。例如:data/uploads
	 * @param String 	$reluploadpath		相对$baseuploadpath上传文件保存路径。例如:templet/sms/send
	 * @param String 	$picname			保存图片名称，不包含后缀。例如：original
	 * @param int 		$width				保存的图片的最大宽度
	 * @param int 		$height				保存的图片的最大高度
	 */
    function upload($baseuploadpath,$reluploadpath,$picname,$width,$height,$root=SITE_PATH){
        @header("Expires: 0");
        @header("Cache-Control: private, post-check=0, pre-check=0, max-age=0", FALSE);
        @header("Pragma: no-cache");
        $extend = pathinfo($_FILES['Filedata']['tmp_name']);   
		$ext = strtolower($extend["extension"]);  
				//dump($extend);
        //$pic_id = time();//使用时间来模拟图片的ID.           
        //$pic_path = $this->getSavePath().'/original.'.$ext;
        $pic_path = $root.'/'.$baseuploadpath.'/'.$reluploadpath.'/'.$picname.'.'.$ext;
        //echo $pic_path;
        //$pic_abs_path = __UPLOAD__.'/avatar/'.$this->uid.'/original.jpg';
        //保存上传图片.
        if(empty($_FILES['Filedata'])) {
	        $return['message'] = '对不起, 图片未上传成功, 请再试一下';
	        $return['code']    = '0';
        }else{
        	$file = @$_FILES['Filedata']['tmp_name'];
		    file_exists($pic_path) && @unlink($pic_path);
		    if(@copy($_FILES['Filedata']['tmp_name'], $pic_path) 
		        || @move_uploaded_file($_FILES['Filedata']['tmp_name'], $pic_path)) {
				@unlink($_FILES['Filedata']['tmp_name']);
			        	
			    include_once( QUICK_ADDONE_PATH.'/libs/Image.class.php' );
			    //Image::thumb( $pic_path, $pic_path , '' , 400 , 320 );
			    Image::thumb( $pic_path, $pic_path , '' , $width , $height );
			        	
			    list($sr_w, $sr_h, $sr_type, $sr_attr) = @getimagesize($pic_path);
			        	
			    //$return['data']['picurl'] = '/'.$this->baseuploadpath .$this->_getTempSavePath().'/original.'.$ext;
			    $return['data']['picurl'] = '/'.$baseuploadpath.'/'.$reluploadpath.'/'.$picname.'.'.$ext;
			    $return['data']['picwidth'] = $sr_w;
			    $return['data']['picheight'] = $sr_h;
			    $return['code']    = '1';
		   	} else {
			  	@unlink($_FILES['Filedata']['tmp_name']);
			 	$return['message'] = '对不起, 图片未上传成功';
				$return['code']    = '0';
			}
        }
        return json_encode( $return );
  	}
    
	/**
	 * 切割图片并保存图片 
	 * @param String 	$baseuploadpath		相对王站基本的完整保存路径。例如:data/uploads
	 * @param String 	$reluploadpath		相对$baseuploadpath上传文件保存路径。例如:templet/sms/send
	 * @param String 	$picname			保存图片名称，不包含后缀。例如：original
	 * @param int 	$width				切割图片的宽度
     * @param int 	$height				切割图片的最大高度
	 */
	function dosave($baseuploadpath,$reluploadpath,$picname,$width,$height,$root=SITE_PATH){
		//header("Content-type: image/jpeg"); 
		$x1 = $_POST['x1'];//客户端选择区域左上角x轴坐标
		$y1 = $_POST['y1'];//客户端选择区域左上角y轴坐标
		$x2 = $_POST['x2'];//客户端选择区 的宽
		$y2 = $_POST['y2'];//客户端选择区 的高
		$w = $_POST['w'];//客户端选择区 的高
		$h = $_POST['h'];//客户端选择区 的高
		$src = $root.'/'.$_POST['picurl'];//图片的路径
				
		// 获取源图的扩展名宽高
		list($sr_w, $sr_h, $sr_type, $sr_attr) = @getimagesize($src);
		if($sr_type){
			//获取后缀名
			$ext = image_type_to_extension($sr_type,false);
		} else {
			echo "-1";
			exit;
		}
		$relpath 	= 	$reluploadpath.'/'.$picname.'.'.$ext;
		$fullpath	=	$root.'/'.$baseuploadpath.'/'.$relpath;//$smsimg_path.'/smsimg_'.time().'.jpg';		// 大图
		$func	=	($ext != 'jpg')?'imagecreatefrom'.$ext:'imagecreatefromjpeg';
		$img_r	=	call_user_func($func,$src);
				
		$dst_r	=	ImageCreateTrueColor( $width, $height );
		$back	=	ImageColorAllocate( $dst_r, 255, 255, 255 );
		ImageFilledRectangle( $dst_r, 0, 0, $width, $height, $back );
		ImageCopyResampled( $dst_r, $img_r, 0, 0, $x1, $y1, $width, $height, $w, $h );
			
		$imageFun = 'image'.($ext=='jpg'?'jpeg':$ext);
		$imageFun($dst_r,$fullpath);
		
		ImageDestroy($dst_r);
		ImageDestroy($img_r);
				
		//$result['smsimg_path']=$smsimg_relpath;
		//$result['status']=1;
		return $relpath;//json_encode( $result );
	}
	
	
	/*	添加彩信表情图表到目标图片上 
	 *	@param	$ground_im			北京图像文件对象.即用	$func	=	($ext != 'jpg')?'imagecreatefrom'.$ext:'imagecreatefromjpeg';
	 *	@param	$water_path			水印图片完整路径
	 *	@param	$xOffset			水印图片的偏移量(X)
	 *	@param	$yOffset			水印图片的偏移量(Y)
	 *	@return 返回处理后的$ground_im变量。
	 */
	function writeImg($ground_im,$waterfpath,$xOffset,$yOffset){
		//读取[du qu]水印文件[wen jian]
		//echo $water_path.' # '.$xOffset.' # '.$yOffset;
		if(!empty($waterfpath) && file_exists($waterfpath)) {
	 		$water_info = getimagesize($waterfpath);
	    	$water_w     = $water_info[0];//取得水印图片的宽
	   		$water_h     = $water_info[1];//取得水印图片的高
						
			$extend = pathinfo($waterfpath);   
			$ext = strtolower($extend["extension"]);  
			//dump($extend);
			$func	=	($ext != 'jpg')?'imagecreatefrom'.$ext:'imagecreatefromjpeg';
			$water_im	=	call_user_func($func,$waterfpath);
						
			//设定图像[tu xiang]的混色模式[mo shi]
	    	imagealphablending($ground_im, true);
	     			
			//拷贝[kao bei]水印到目标[mu biao]文件[wen jian] 
			imagecopy($ground_im, $water_im, $xOffset,$yOffset, 0, 0, $water_w,$water_h);
						
			//释放[shi fang]内存[nei cun]
			if(isset($water_info)) unset($water_info);
			if(isset($water_im)) imagedestroy($water_im);
	 	}
		return $ground_im;
	}
		
	
	/*	在背景图片上画水印和文字。
	 *	@param	$bgimgfpath		背景图像文件完整路径。
	 *	@param	$waterfpath		水印图片完整路径
	 *	@param	$toaddtext		要在图片上加的文字
	 *	@param	$xyOffset			水印图片的偏移量($xyOffset[0]-X方向 $xyOffset[1]-Y方向)
	 *	@param	$rgb					字体颜色，数组($rgb[0] $rgb[1] $rgb[2])三色十进制值。
	 *	@param	$font_file		字体文件完整路径，默认值SITE_PATH."/ttffont/msyh.ttf"
	 *	@param	$font_size		字体大小，默认值10。
	 *	@return 返回$bgimgfpath图片处理后的图像数据变量，即imagecreate****()返回类型的变量。
	 */
	public function writeTxtImg2Bg($bgimgfpath,$waterfpath,$toaddtext,$xyOffset,$rgb,$font_file=null,$font_size=10,$TxtXYOffset=null) {
		if(empty($font_file))$font_file=(SITE_PATH."/ttffont/msyh.ttf");
		$extend = pathinfo($bgimgfpath);   
		$ext = strtolower($extend["extension"]);  
		//dump($extend);
		$func	=	($ext != 'jpg')?'imagecreatefrom'.$ext:'imagecreatefromjpeg';
		$im	=	call_user_func($func,$bgimgfpath);
				
		/** 字体颜色 **/
		$font_color = ImageColorAllocate ($im, $rgb[0], $rgb[1], $rgb[2]); //这是文字颜色，灰色
				
		/** 注意如果为非ＵＴＦ－８格式文件，需要做下面的编码转换
		 *		$text = iconv('GB2312','UTF-8',"张三的博客11");		**/  
		/** 加水印 **/
		if(!empty($waterfpath))$im = $this->writeImg($im,$waterfpath,$xyOffset[0],$xyOffset[1]);
	
		/** 加载需要的字体文件，最好将需要的字体文件提取出来保存到指定目录例如（ttffont） **/ 
		//26：字体， 0 是角度， （左上角为０，０）x=10(向右为正)，y=36(向下为正)是坐标， $font_color是文字色， font是字体，  文本是填入的文字  
		//参考的例子：imagettftext($im, 26,0, 10, 96, $font_color ,$font_file, $smstext);  //往图片插入文字 
		if(!empty($toaddtext)) {
			if(empty($TxtXYOffset)){
				imagettftext($im, $font_size, 0, 8, 23, $font_color ,$font_file, $toaddtext);  //往图片插入文字  
			}else{
				imagettftext($im, $font_size, 0, $TxtXYOffset[0], $TxtXYOffset[1], $font_color ,$font_file, $toaddtext);  //往图片插入文字  
			}
		}
		return $im;
	}
	
	
	//服务初始化
	public function init($data = '') {
	}
	
	
	//运行服务，系统服务自动运行
	public function run() {
	}
}
?>